iT邦幫忙

0

Visual Studio 編譯得過但 MSBuild 編譯失敗的情況

  • 分享至 

  • xImage
  •  

網路上沒找到,記錄在這邊,說不定未來有機會幫上其他人。

#前提:
一個解決方案,裡面有A、B、C三個專案,B專案依賴於A、C專案依賴於B
C為unittest的.exe執行檔,A與B皆編譯為.lib檔。

#狀況:
編譯方法是依序編譯A B C三個專案:

msbuild.exe A.vcxproj /p:configuration=debug /p:platform=x64
msbuild.exe B.vcxproj /p:configuration=debug /p:platform=x64
msbuild.exe C.vcxproj /p:configuration=debug /p:platform=x64

編譯到C專案時發生問題,顯示LNK2001: unresolved external symbol,
所有B專案的function皆被判定為外部符號,無法使用。
屬性→連結器→輸入→其他相依性已增加B專案的lib。

其中若使用Visual Studio編譯方案皆無問題,或是使用

msbuild.exe solution.sln /p:configuration=debug /p:platform=x64

編譯整個解決方案皆可編譯成功

##編譯錯誤時,console的輸出可以看到:

Link:
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\link.exe ... "D:\project\.\x64\Debug\*Undefined*.lib"...

原本應該出現B.lib的地方變成了Undefined.lib

#原因:
屬性→連結器→輸入→其他相依性中不能使用SolutionName,在單獨編譯時會找不到對應的名稱:
(X)

$(SolutionDir)$(PlatformTarget)\$(Configuration)\$(SolutionName).lib

(O) 請使用直接檔名指定:

$(SolutionDir)$(PlatformTarget)\$(Configuration)\B.lib

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言